package com.dongdongshop.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.dongdongshop.data.Page;
import com.dongdongshop.data.Result;
import com.dongdongshop.pojo.TbContent;
import com.dongdongshop.pojo.TbContentCategory;
import com.dongdongshop.service.ContentCategoryService;
import com.dongdongshop.service.ContentService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@Controller
@RequestMapping("content")
public class ContentController {
    @DubboReference
    private ContentService contentService;

    @DubboReference
    private ContentCategoryService contentCategoryService;

    @RequestMapping("toShow")
    public String toShow(Model model){
        List<TbContentCategory> list = contentCategoryService.select();
        model.addAttribute("list",list);
        return "admin/content";
    }

    @RequestMapping("findList")
    @ResponseBody
    public Result findList(@RequestParam(defaultValue = "1")Integer pageNum,
                           @RequestParam(defaultValue = "3")Integer pageSize){
        Page<TbContent> page = contentService.findList(pageNum,pageSize);
        return Result.ok().setData(page);
    }

    @RequestMapping("addInfo")
    @ResponseBody
    public Result addInfo(TbContent tbContent){
        contentService.addInfo(tbContent);
        return Result.ok();
    }

    @RequestMapping("selectById")
    @ResponseBody
    public Result selectById(TbContent tbContent){
        TbContent tbContent1 = contentService.selectById(tbContent);
        return Result.ok().setData(tbContent1);
    }

    @RequestMapping("updateInfo")
    @ResponseBody
    public Result updateInfo(TbContent tbContent){
        contentService.updateInfo(tbContent);
        return Result.ok();
    }

    @RequestMapping("deleteInfo")
    @ResponseBody
    public Result deleteInfo(Long[] id){
        contentService.deleteInfo(id);
        return Result.ok();
    }

    @RequestMapping("upload")
    @ResponseBody
    public Result insertInfo(@RequestParam("image") MultipartFile image){
        //传统写法：
        // 1. 获取一个路径用来存放图片位置
        // 2. 调用MultipartFile输出功能将图片以io流的方式输出到文件夹里
        // 3. 并且返回图片名称即可（详情可见news项目中的上传方法）

        //现在：
        //改用第三方调用方式上传图片，将图片放到阿里云上，而不是放到我们指定的文件夹里（因为我们调用文件夹io流性能非常差
        /*
            调用第三方接口：有两种方式
            第一种是 SDK 方式（导jar包调用方法）
            第二种是：API 方式（不需要导jar包，看接口文档，使用http方式调用（都需要掌握）
            这里是讲的第一种方法
         */

        // yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1（杭州）为例，Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
        String https = "https://";
        String endpoint = "oss-cn-beijing.aliyuncs.com";

        // 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tNsWhDy41FeVhm8fudw";
        String accessKeySecret = "GGhLSQqcpheEfF0pk4t9GiP0833TtZ";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(https + endpoint, accessKeyId, accessKeySecret);

        // 创建PutObjectRequest对象。
        // 依次填写Bucket名称（例如examplebucket）和Object完整路径（例如exampledir/exampleobject.txt）。Object完整路径中不能包含Bucket名称。
        PutObjectRequest putObjectRequest = null;
        //图片名
        String imagePath = "image/" + image.getOriginalFilename();
        //Bucket名称
        String bucket = "2107lcc";
        try {
            putObjectRequest = new PutObjectRequest(bucket,imagePath, image.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        };

        // 上传字符串。
        ossClient.putObject(putObjectRequest);

        // 关闭OSSClient。
        ossClient.shutdown();

        //https://2107lcc.oss-cn-beijing.aliyuncs.com/image/0bd2697e-2ef1-472d-973d-0fe3be7d3051.JPG
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(https).append(bucket).append(".").append(endpoint).append("/").append(imagePath);
        System.out.println(stringBuilder.toString());
        return Result.ok().setData(stringBuilder.toString());
    }
}
